Dein eigener TeamSpeak 3-Server in Docker: Schritt für Schritt

Ja, ich weiß – TeamSpeak 3 ist nicht mehr das jüngste Pferd im Stall. Es gibt schon neuere Versionen wie TeamSpeak 5 oder sogar den TS6-Server. Und klar, es gibt auch moderne Alternativen wie Discord, die viele inzwischen nutzen.

Ich persönlich mag Discord jedoch nicht besonders – vor allem wegen der fragwürdigen Datenschutzpraxis und der Tatsache, dass alle Daten über deren Server laufen.
TS3 läuft dagegen vorallem lokal und stabil, frisst wenig Ressourcen und funktioniert einfach. Viele Communities, Clans und Teams setzen deshalb nach wie vor auf den Klassiker – und mit Docker wird die Installation noch einfacher.

🛠 Die Vorbereitung

Bevor wir den Container starten, erstelle ich gerne ein eigenes Docker-Netzwerk. So hat der Docker Container eine feste IP und kann auch unter einem Alias erreicht werden.

Erstelle das Netzwerk mit:

docker network create --subnet=172.19.68.0/24 ts3.dockernetwork.local

Diese IPs kannst du natürlich anpassen – wichtig ist nur, dass sie zu deinem Setup passen.

📦 Docker-Compose

Hier das Minimal-Setup für einen lauffähigen TS3-Server in Docker.

---
services:

  teamspeak-app:
    image: teamspeak:latest
    container_name: teamspeak3
    restart: always
    ports:
     - 9987:9987/udp
     - 10011:10011
     - 30033:30033
     - 41144:41144
     - 10022:10022
    volumes:
     - ./data:/var/ts3server/
    environment:
      TS3SERVER_LICENSE: accept
    networks:
      ts3.dockernetwork.local:
        ipv4_address: 172.19.68.10
        aliases:
          - ts3.domain.com

networks:
  ts3.dockernetwork.local:
    external: true

🌐 Wichtige Ports für den Betrieb

Damit dein TeamSpeak-Server auch von außen erreichbar ist, musst du ein paar Ports in deiner Firewall oder im Router freigeben:

  • Standard-Voice-Port (UDP, eingehend): 9987 → absolut notwendig, sonst kommt niemand auf den Server.
  • Filetransfer (TCP, eingehend): 30033 → nur nötig, wenn du Dateien über den TS3-Client austauschen willst.
  • ServerQuery (TCP, eingehend): 10011 → optional, wird für externe Tools oder Automatisierungen gebraucht, z. B. für ts3index oder YaTQA.
  • Weblist (UDP, ausgehend): 2010 → sorgt dafür, dass dein Server in der globalen TS3-Liste auftaucht.
  • TSDNS (TCP, eingehend): 41144 → nur relevant, wenn du TSDNS nutzt, um Domains auf Server-Instanzen zu mappen.
  • Accounting (TCP, ausgehend): 2008 → wird für Lizenz- und Accounting-Checks von TeamSpeak selbst benötigt.
  • SSH (TCP, eingehend): 10022 (falls aktiviert) → für die abgesicherte Remote-Administration, standardmäßig aber oft gar nicht im Einsatz.

👉 Wichtig: Für einen reinen Sprachserver reichen in den meisten Fällen die Ports 9987 und 30033. Alles andere ist optional, je nachdem, wie du deinen TS3-Server nutzen möchtest.

🔑 Der erste Start

Gestartet wird der Container initial mit:

docker compose up

Beim allerersten Start des TS3-Containers spuckt das Log zwei sehr wichtige Infos aus – und die haben unterschiedliche Aufgaben. Hier ein Beispiel aus meinen Logs:

teamspeak3  | 2025-08-08 10:48:56.056013|INFO    |ServerLibPriv |   |TeamSpeak 3 Server 3.13.7 (2022-06-20 12:21:53)
teamspeak3  | 2025-08-08 10:48:56.056091|INFO    |ServerLibPriv |   |SystemInformation: Linux 6.8.12-11-pve #1 SMP PREEMPT_DYNAMIC PMX 6.8.12-11 (2025-05-22T09:39Z) x86_64 Binary: 64bit
teamspeak3  | 2025-08-08 10:48:56.056117|INFO    |ServerLibPriv |   |Using hardware aes
teamspeak3  | 2025-08-08 10:48:56.056391|INFO    |DatabaseQuery |   |dbPlugin name:    SQLite3 plugin, Version 3, (c)TeamSpeak Systems GmbH
teamspeak3  | 2025-08-08 10:48:56.056450|INFO    |DatabaseQuery |   |dbPlugin version: 3.11.1
teamspeak3  | 2025-08-08 10:48:56.056654|INFO    |DatabaseQuery |   |checking database integrity (may take a while)
teamspeak3  | 2025-08-08 10:48:56.066339|INFO    |SQL           |   |db_CreateTables() tables created
teamspeak3  |
teamspeak3  | ------------------------------------------------------------------
teamspeak3  |                       I M P O R T A N T
teamspeak3  | ------------------------------------------------------------------
teamspeak3  |                Server Query Admin Account created
teamspeak3  |          loginname= "serveradmin", password= "e1JB4Trv"
teamspeak3  |          apikey= "BAB0J_rFa4mc8ZbrIEAVQ2X4MdTSxSiJhS-0KQA"
teamspeak3  | ------------------------------------------------------------------
teamspeak3  |
teamspeak3  | 2025-08-08 10:48:56.102399|WARNING |Accounting    |   |Unable to open licensekey.dat, falling back to limited functionality
teamspeak3  | 2025-08-08 10:48:56.109161|INFO    |Accounting    |   |Licensing Information
teamspeak3  | 2025-08-08 10:48:56.109201|INFO    |Accounting    |   |licensed to       : Anonymous
teamspeak3  | 2025-08-08 10:48:56.109214|INFO    |Accounting    |   |type              : No License
teamspeak3  | 2025-08-08 10:48:56.109228|INFO    |Accounting    |   |starting date     : Tue Feb  1 00:00:00 2022
teamspeak3  | 2025-08-08 10:48:56.109258|INFO    |Accounting    |   |ending date       : Thu Jul  1 00:00:00 2027
teamspeak3  | 2025-08-08 10:48:56.109337|INFO    |Accounting    |   |max virtualservers: 1
teamspeak3  | 2025-08-08 10:48:56.109377|INFO    |Accounting    |   |max slots         : 32
teamspeak3  | 2025-08-08 10:48:56.616594|INFO    |              |   |Puzzle precompute time: 490
teamspeak3  | 2025-08-08 10:48:56.617454|INFO    |FileManager   |   |listening on 0.0.0.0:30033, [::]:30033
teamspeak3  | 2025-08-08 10:48:56.618223|INFO    |VirtualSvrMgr |   |executing monthly interval
teamspeak3  | 2025-08-08 10:48:56.618365|INFO    |VirtualSvrMgr |   |reset virtualserver traffic statistics
teamspeak3  | 2025-08-08 10:48:56.665351|INFO    |Query         |   |Using a query thread pool size of 2
teamspeak3  | 2025-08-08 10:48:56.683005|INFO    |VirtualServerBase|1  |listening on 0.0.0.0:9987, [::]:9987
teamspeak3  | 2025-08-08 10:48:56.683403|WARNING |VirtualServer |1  |--------------------------------------------------------
teamspeak3  | 2025-08-08 10:48:56.683436|WARNING |VirtualServer |1  |ServerAdmin privilege key created, please use the line below
teamspeak3  | 2025-08-08 10:48:56.683453|WARNING |VirtualServer |1  |token=N3rGIAk7JEfZwjG1uhUraJteQmK3lwF8yyF9dCee
teamspeak3  | 2025-08-08 10:48:56.683464|WARNING |VirtualServer |1  |--------------------------------------------------------
teamspeak3  |
teamspeak3  | ------------------------------------------------------------------
teamspeak3  |                       I M P O R T A N T
teamspeak3  | ------------------------------------------------------------------
teamspeak3  |       ServerAdmin privilege key created, please use it to gain
teamspeak3  |       serveradmin rights for your virtualserver. please
teamspeak3  |       also check the doc/privilegekey_guide.txt for details.
teamspeak3  |
teamspeak3  |        token=N3rGIAk7JEfZwjG1uhUraJteQmK3lwF8yyF9dCee
teamspeak3  | ------------------------------------------------------------------
teamspeak3  |
teamspeak3  | 2025-08-08 10:48:56.683618|INFO    |Query         |   |listening for query on 0.0.0.0:10011, [::]:10011
teamspeak3  | 2025-08-08 10:48:56.683820|INFO    |CIDRManager   |   |updated query_ip_allowlist ips: 127.0.0.1/32, ::1/128,
teamspeak3  | 2025-08-08 10:48:56.837909|INFO    |              |   |myTeamSpeak identifier revocation list was downloaded successfully - all related features are activated

1. Server Query Admin Account
Das ist der Zugang für die Server Query – also die Fernsteuerung des TS3-Servers über Port 10011.

  • Wird z. B. für Tools wie YaTQA oder Automatisierungsskripte genutzt.
  • Das Passwort gehört zu dem Benutzer serveradmin.
  • Alternativ kann der apikey verwendet werden, der oft bequemer ist, weil er keine Session-basierten Logins benötigt.

2. ServerAdmin Privilege Key
Das ist ein einmaliger Einlösecode, den du direkt im TS3-Client verwendest, um dich selbst zum höchsten Admin (Server Admin) auf dem Virtual Server zu machen.

  • Einlösen im Client unter Berechtigungen → Berechtigungsschlüssel verwenden.
  • Danach ist der Token verbraucht und dein Benutzer dauerhaft Admin.

Mein Tipp: Speichere den Server Query Admin Key sicher ab. Den Privilege Key brauchst du nur einmal, den Query-Login kannst du später immer wieder nutzen.

🖱️ Erster Login: So nutzt du den Berechtigungsschlüssel

Sobald der TS3-Server läuft, verbindest du dich einfach mit der IP oder Domain deines Servers. Stelle dabei sicher, dass du die Firewall vorher konfiguriert hast, sonst wird das nichts! 😉

Beim ersten Verbinden wirst du automatisch aufgefordert, einen Berechtigungsschlüssel einzugeben. Kopiere hier den Privilege Key aus den Container-Logs hinein und bestätige.

Ist die Eingabe erfolgreich, bekommst du sofort die Rückmeldung, dass der Schlüssel erfolgreich verwendet wurde – schon hast du alle Admin-Rechte auf dem Server.

✅ Fazit

Ein TS3-Server in Docker ist schnell eingerichtet, läuft stabil und lässt sich bei Bedarf einfach auf andere Server umziehen. Für mich ist es nach wie vor die unkomplizierteste Methode, eine kleine Community oder ein Team-Setup zu betreiben. Und weißt du was? Nach all den Jahren habe ich immer noch meinen eigenen TS3-Server am Laufen – und ich nutze ihn regelmäßig. Wenn du neugierig bist: ts3.techniverse.net.

👥 Techniverse Community

Matrix, Selfhosting, smarte IT-Lösungen und jede Menge Nerd-Talk – das findest du in der Techniverse Community.
Komm vorbei, tausch dich aus und werde ein Teil von uns.
👉 Unsere Gruppe auf Matrix: #community:techniverse.net
Wir freuen uns auf dich!

Vielen Dank fürs Teilen!